package shop; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; public class OPDept implements Serializable{ /** * */ private static final long serialVersionUID = -2252946041952042992L; Order root; public void write() { try (FileOutputStream fs = new FileOutputStream("order.ser")) { ObjectOutputStream os = new ObjectOutputStream(fs); ArrayList<Order> orderList = new ArrayList<Order>(); orderList = toArray(); os.writeObject(orderList); os.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void read() { try (FileInputStream fi = new FileInputStream("order.ser");) { ObjectInputStream os = new ObjectInputStream(fi); @SuppressWarnings("unchecked") ArrayList<Order> orders = ((ArrayList<Order>) os.readObject()); for (Order temp : orders) { // if (temp != null) { // if (findNode(temp.getName()) == null) { addNode(temp); // } // } } os.close(); } catch ( FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch ( IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch ( ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public ArrayList<Order> toArray() { ArrayList<Order> result = new ArrayList<Order>(); inOrderTraverseTree(root, result); return result; } public void addNode(Order order) { int orderNumber = order.getOrderNumber(); String orderDate = order.getDate(); String user = order.getUser(); int quantity = order.getQuantity(); String product = order.getProduct(); int price = order.getPrice(); Order newNode = new Order(orderNumber, orderDate, user, quantity, product, price); if (root == null) { root = newNode; } else { Order focusNode = root; Order parent; while (true) { parent = focusNode; if (user.compareToIgnoreCase(focusNode.getUser()) < 0) { focusNode = focusNode.leftChild; if (focusNode == null) { parent.leftChild = newNode; return; } } else { focusNode = focusNode.rightChild; if (focusNode == null) { parent.rightChild = newNode; return; } } } } } public void inOrderTraverseTree(Order focusNode, ArrayList<Order> result) { if (focusNode != null) { inOrderTraverseTree(focusNode.leftChild, result); result.add(focusNode); inOrderTraverseTree(focusNode.rightChild, result); } } public Order findNode(String name) { Order focusNode = root; while (focusNode.getUser().equalsIgnoreCase(name)) { if (name.compareToIgnoreCase(focusNode.getUser()) < 0) { focusNode = focusNode.leftChild; } else { focusNode = focusNode.rightChild; } if (focusNode == null) return null; } return focusNode; } public boolean remove(int key) { Order focusNode = root; Order parent = root; boolean isItALeftChild = true; while (focusNode.getOrderNumber() != key) { parent = focusNode; if (key < focusNode.getOrderNumber()) { isItALeftChild = true; focusNode = focusNode.leftChild; } else { isItALeftChild = false; focusNode = focusNode.rightChild; } if (focusNode == null) return false; } if (focusNode.leftChild == null && focusNode.rightChild == null) { if (focusNode == root) root = null; else if (isItALeftChild) parent.leftChild = null; else parent.rightChild = null; } else if (focusNode.rightChild == null) { if (focusNode == root) root = focusNode.leftChild; else if (isItALeftChild) parent.leftChild = focusNode.leftChild; else parent.rightChild = focusNode.leftChild; } else if (focusNode.leftChild == null) { if (focusNode == root) root = focusNode.rightChild; else if (isItALeftChild) parent.leftChild = focusNode.rightChild; else parent.rightChild = focusNode.rightChild; } else { Order replacement = getReplacementNode(focusNode); if (focusNode == root) root = replacement; else if (isItALeftChild) parent.leftChild = replacement; else parent.rightChild = replacement; replacement.leftChild = focusNode.leftChild; } return true; } public Order getReplacementNode(Order replacedNode) { Order replacementParent = replacedNode; Order replacement = replacedNode; Order focusNode = replacedNode.rightChild; while (focusNode != null) { replacementParent = replacement; replacement = focusNode; focusNode = focusNode.leftChild; } if (replacement != replacedNode.rightChild) { replacementParent.leftChild = replacement.rightChild; replacement.rightChild = replacedNode.rightChild; } return replacement; } }